package br.gov.sedurb.ws.client;


import br.gov.se.seplag.RequestFixo;
import br.gov.se.seplag.ebo.v1.EstadoProtocolo;
import br.gov.se.seplag.ebo.v1.Protocolo;
import br.gov.se.seplag.protocoloatendimento.ErroInfoMessage;
import br.gov.se.seplag.protocoloatendimento.ParametroAtualizarProtocoloAtendimento;
import br.gov.se.seplag.protocoloatendimento.ParametroConsultarProtocoloAtendimento;
import br.gov.se.seplag.protocoloatendimento.ParametroEmitirProtocoloAtendimento;
import br.gov.se.seplag.protocoloatendimento.ParametroGerarCodigoProtocoloAtendimento;
import br.gov.se.seplag.protocoloatendimento.ParametroObterProtocoloAtendimento;
import br.gov.se.seplag.protocoloatendimento.ProtocoloAtendimento;
import br.gov.se.seplag.protocoloatendimento.ProtocoloAtendimento_Service;
import br.gov.se.seplag.protocoloatendimento.ResultadoAtualizarProtocoloAtendimento;

import br.gov.se.seplag.protocoloatendimento.ResultadoConsultarProtocoloAtendimento;

import br.gov.se.seplag.protocoloatendimento.ResultadoEmitirProtocoloAtendimento;

import br.gov.se.seplag.protocoloatendimento.ResultadoGerarCodigoProtocoloAtendimento;

import br.gov.se.seplag.protocoloatendimento.ResultadoObterProtocoloAtendimento;

import br.gov.sedurb.util.JSFUtils;

import java.math.BigInteger;

import java.util.ArrayList;
import java.util.List;

import javax.xml.ws.WebServiceRef;
// !THE CHANGES MADE TO THIS FILE WILL BE DESTROYED IF REGENERATED!
// This source file is generated by Oracle tools
// Contents may be subject to change
// For reporting problems, use the following
// Version = Oracle WebServices (11.1.1.0.0, build 130224.1947.04102)

public class ProtocoloAtendimentoSOAPClient extends WSClient<ProtocoloAtendimento> {
    @WebServiceRef
    private ProtocoloAtendimento_Service protocoloAtendimento_Service;
    private static ProtocoloAtendimentoSOAPClient obj;

    private ProtocoloAtendimentoSOAPClient() {
        super();
    }

    public static ProtocoloAtendimentoSOAPClient getInstance() {
        if (obj == null) {
            obj = new ProtocoloAtendimentoSOAPClient();
        }

        return obj;
    }

    public String atualizarProtocoloAtendimento(String codigoProtocolo,
                                                EstadoProtocolo estadoProtocolo) {

        ParametroAtualizarProtocoloAtendimento parameters =
            new ParametroAtualizarProtocoloAtendimento();

        parameters.setCdProtocolo(codigoProtocolo);
        parameters.setStatus(estadoProtocolo);

        ResultadoAtualizarProtocoloAtendimento resultado = new ResultadoAtualizarProtocoloAtendimento();

        try {
            resultado =
                    getPort().atualizarProtocoloAtendimento(parameters, RequestFixo.cabecalho());
        } catch (ErroInfoMessage e) {
            JSFUtils.addFacesErrorMessage("Erro ao tentar utilizar o serviço " + this.getClass().getSimpleName() + ":" + e.getMessage());
        } catch (Exception e) {
            JSFUtils.addFacesErrorMessage(erroGenerico(e));
        }
        return resultado.getStatus();
    }

    public List<ResultadoConsultarProtocoloAtendimento.Protocolos.Protocolo> consultarProtocoloAtendimento(String codigoProtocoloPai,
                                                                                                           String cpf) {

        ParametroConsultarProtocoloAtendimento parameters =
            new ParametroConsultarProtocoloAtendimento();

        parameters.setCdProtocoloPai(codigoProtocoloPai);
        parameters.setCpf(cpf);

        List<ResultadoConsultarProtocoloAtendimento.Protocolos.Protocolo> listaProtocolo =
            new ArrayList<ResultadoConsultarProtocoloAtendimento.Protocolos.Protocolo>();

        try {
            ResultadoConsultarProtocoloAtendimento lista =
                getPort().consultarProtocoloAtendimento(parameters,
                                                        RequestFixo.cabecalho());

            listaProtocolo = lista.getProtocolos().getProtocolo();

        } catch (ErroInfoMessage e) {
            JSFUtils.addFacesErrorMessage("Erro ao tentar utilizar o serviço " + this.getClass().getSimpleName() + ":" + e.getMessage());
        } catch (Exception e) {
            JSFUtils.addFacesErrorMessage(erroGenerico(e));
        }

        return listaProtocolo;
    }

    public ResultadoEmitirProtocoloAtendimento emitirProtocoloAtendimento(String codigoProtocoloPai,
                                                                          String cpf,
                                                                          BigInteger idAgendamentoAgendaFacil,
                                                                          String nomeServico,
                                                                          String nomeUnidadeAtendimento) {

        ParametroEmitirProtocoloAtendimento parameters =
            new ParametroEmitirProtocoloAtendimento();

        parameters.setCdProtocoloPai(codigoProtocoloPai);
        parameters.setCpf(cpf);
        parameters.setIdAgendamentoAgendaFacil(idAgendamentoAgendaFacil);
        parameters.setNmServico(nomeServico);
        parameters.setNmUnidade(nomeUnidadeAtendimento);

        ResultadoEmitirProtocoloAtendimento resultado = null;

        try {
            resultado =
                    getPort().emitirProtocoloAtendimento(parameters, RequestFixo.cabecalho());
        } catch (ErroInfoMessage e) {
            JSFUtils.addFacesErrorMessage("Erro ao tentar utilizar o serviço " + this.getClass().getSimpleName() + ":" + e.getMessage());
        } catch (Exception e) {
            JSFUtils.addFacesErrorMessage(erroGenerico(e));
        }
        return resultado;
    }

    public String gerarCodigoProtocoloAtendimento(long codigoOrgao,
                                                  long codigoSevico,
                                                  long senha) {

        ParametroGerarCodigoProtocoloAtendimento parameters =
            new ParametroGerarCodigoProtocoloAtendimento();

        parameters.setIdOrgao(BigInteger.valueOf(codigoOrgao));
        parameters.setIdServico(BigInteger.valueOf(codigoSevico));
        parameters.setSenha(BigInteger.valueOf(senha));

        ResultadoGerarCodigoProtocoloAtendimento resultado = null;

        try {
            resultado =
                    getPort().gerarCodigoProtocoloAtendimento(parameters, RequestFixo.cabecalho());
        } catch (ErroInfoMessage e) {
            JSFUtils.addFacesErrorMessage("Erro ao tentar utilizar o serviço " + this.getClass().getSimpleName() + ":" + e.getMessage());
        } catch (Exception e) {
            JSFUtils.addFacesErrorMessage(erroGenerico(e));
        }
        return resultado.getCodigoProtocolo();
    }

    public Protocolo obterProtocoloAtendimento(String codigoProtocoloPai) {

        ParametroObterProtocoloAtendimento parameters =
            new ParametroObterProtocoloAtendimento();

        parameters.setCdProtocolo(codigoProtocoloPai);

        Protocolo protocolo = null;

        try {
            ResultadoObterProtocoloAtendimento resultado =
                getPort().obterProtocoloAtendimento(parameters,
                                                    RequestFixo.cabecalho());
            
            protocolo = resultado.getProtocolo();
            
        } catch (ErroInfoMessage e) {
            JSFUtils.addFacesErrorMessage("Erro ao tentar utilizar o serviço " + this.getClass().getSimpleName() + ":" + e.getMessage());
        } catch (Exception e) {
            JSFUtils.addFacesErrorMessage(erroGenerico(e));
        }
        return protocolo;
    }

    public ProtocoloAtendimento criarPortType() {

        protocoloAtendimento_Service = new ProtocoloAtendimento_Service();
        ProtocoloAtendimento port =
            protocoloAtendimento_Service.getProtocoloAtendimentoSOAP();

        return port;
    }
}
